#pragma once

#include <string>

#include "SnakeLib/Direction.h"

namespace snake
{

struct ISolver;
class MySolver;

namespace Assert
{

/**
 * Snake-specific assertion. 
 *
 * @param board_str - encoded representation of the board; for codes, @see snake::BoardCodec
 * @param solver - user's solver object
 * @param direction - expected solver's reaction
 */
void Solve(const std::string &board_str, snake::ISolver &solver, snake::EDirection direction);

void GetHeadPosition(const std::string &board_str, snake::ISolver &solver, std::pair<int, int> position);

void GetCurrentDirection(const std::string &board_str, snake::ISolver &solver, snake::EDirection direction);

void CheckForCrash(const std::string &board_str, snake::ISolver &solver, bool result);
  }
}